package factory.factorymethod.pizzastore.order;
import factory.factorymethod.pizzastore.pizza.Pizza;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 从简单工厂模式（静态工厂模式）延申来看，比如要添加不同地方的口，北京的披萨、伦敦的披萨，
 * 那原本的静态工厂模式要实现就不仅要新增类，连使用类都得改：用户得指定北京的披萨还是添加的披萨，
 * 添加了更多的逻辑。
 *
 * 工厂办法模式：则是把工厂类改成抽象类，然后北京/伦敦 的工厂类再来继承这个抽象工厂类
 *
 */
public abstract class OrderPizza {

	//定义一个抽象方法，createPizza , 让各个工厂子类自己实现
	abstract Pizza createPizza(String orderType);

	// 构造器
	public OrderPizza() {
		Pizza pizza = null;
		String orderType; // 订购披萨的类型
		do {
			orderType = getType();
			pizza = createPizza(orderType); //抽象方法，由工厂子类完成
			//输出pizza 制作过程
			pizza.prepare();
			pizza.bake();
			pizza.cut();
			pizza.box();

		} while (true);
	}



	// 写一个方法，可以获取客户希望订购的披萨种类
	private String getType() {
		try {
			BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
			System.out.println("input pizza 种类:");
			String str = strin.readLine();
			return str;
		} catch (IOException e) {
			e.printStackTrace();
			return "";
		}
	}

}
